/*
十进制数转换为二进制数时，由于整数和小数的转换方法不同，所以先将十进制数的整数部分和小数部分分别转换后，再加以合并。
十进制整数转换为二进制整数采用"除2取余，逆序排列"法。
具体做法是：用2整除十进制整数，可以得到一个商和余数；再用2去除商，又会得到一个商和余数，如此进行，直到商为小于1时为止，然后把先得到的余数作为二进制数的低位有效位，后得到的余数作为二进制数的高位有效位，依次排列起来

十进制小数转换成二进制小数采用"乘2取整，顺序排列"法。具体做法是：用2乘十进制小数，可以得到积，将积的整数部分取出，再用2乘余下的小数部分，又得到一个积，再将积的整数部分取出，如此进行，直到积中的小数部分为零，此时0或1为二进制的最后一位。或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来，先取的整数作为二进制小数的高位有效位，后取的整数作为低位有效位。
 */
function tenToTwo(num) {
    let leftStr = '';
    let rightStr = '';
    let integer
    let decimal
    [integer, decimal] = num.toString().split('.');
    let left = Int(integer, leftStr);
    let right = Deciaml(decimal/Math.pow(10,decimal.length), rightStr)
    return left + '.' + right
}

function Deciaml(num, str) {
    if (num.toString().indexOf('.') === -1 || str.length === 46) return str
    num *= 2
    str += Math.floor(num)
    if (Math.floor(num) === 1) {
        num -= 1
    }
    return Deciaml(num, str)

}
function Int(num, str) {
    if (num < 1) return str
    // 在头部拼接
    str = num % 2 + str
    num = Math.floor(num / 2)
    return Int(num, str)

}

console.log(tenToTwo(123.234))
